/**
 * 
 */
package br.com.estrategos.modelo.conta;

import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.MappedSuperclass;

import org.hibernate.annotations.ForeignKey;

import br.com.estrategos.modelo.pessoa.PessoaFisicaEntity;

/**
 * @author x12259401
 * 
 */
@MappedSuperclass
public abstract class Conta {

	@Id
	@GeneratedValue
	@Column(name = "idconta", unique = true, length = 10)
	private Long idConta;

	@Column(name = "valorentrada", nullable = false, scale=10, precision=2, columnDefinition="decimal(10,2)")
	private BigDecimal valorEntrada;

	@Column(name = "status", nullable = false)
	private boolean status;

	@Column(nullable = false)
	private Date dtinicio;

	@Column(nullable = false)
	private Date dtcadastro;

	@Enumerated(EnumType.STRING)
	@Column(name = "tipopagamento", columnDefinition = "char(2)")
	private TipoPagamento tipopagamento;

	@Enumerated(EnumType.STRING)
	@Column(name = "formapagamento", columnDefinition = "char(2)")
	private FormaPagamento formapagamento;

	@ManyToOne(targetEntity = PessoaFisicaEntity.class, fetch = FetchType.LAZY)
	@ForeignKey(name = "fk_idpessoafisica")
	@JoinColumn(name = "idpessoafisica", nullable = false)
	private PessoaFisicaEntity pessoaFisica;

	@ManyToOne(targetEntity = ReceitaEntity.class, fetch = FetchType.LAZY)
	@ForeignKey(name = "fk_idreceita")
	@JoinColumn(name = "idreceita", nullable = false)
	private ReceitaEntity receita;

	
	public Long getIdConta() {
		return idConta;
	}

	public void setIdConta(Long idConta) {
		this.idConta = idConta;
	}



	public BigDecimal getValorEntrada() {
		return valorEntrada;
	}

	public void setValorEntrada(BigDecimal valorEntrada) {
		this.valorEntrada = valorEntrada;
	}

	public boolean isStatus() {
		return status;
	}

	public void setStatus(boolean status) {
		this.status = status;
	}

	public Date getDtinicio() {
		return dtinicio;
	}

	public void setDtinicio(Date dtinicio) {
		this.dtinicio = dtinicio;
	}

	public Date getDtcadastro() {
		return dtcadastro;
	}

	public void setDtcadastro(Date dtcadastro) {
		this.dtcadastro = dtcadastro;
	}

	public TipoPagamento getTipopagamento() {
		return tipopagamento;
	}

	public void setTipopagamento(TipoPagamento tipopagamento) {
		this.tipopagamento = tipopagamento;
	}

	public FormaPagamento getFormapagamento() {
		return formapagamento;
	}

	public void setFormapagamento(FormaPagamento formapagamento) {
		this.formapagamento = formapagamento;
	}

	public PessoaFisicaEntity getPessoaFisica() {
		return pessoaFisica;
	}

	public void setPessoaFisica(PessoaFisicaEntity pessoaFisica) {
		this.pessoaFisica = pessoaFisica;
	}

	public ReceitaEntity getReceita() {
		return receita;
	}

	public void setReceita(ReceitaEntity receita) {
		this.receita = receita;
	}
}
